package jm.nj.demo07main.demo04;

import com.sun.xml.internal.ws.api.ha.StickyFeature;

import java.util.ArrayList;
import java.util.Iterator;

/*
 * 泛型:JDK1.5之后出现的新特性,是一种安全机制
 *
 * java中的泛型是伪泛型:java文件中有泛型的概念,在.class文件中是没有泛型的
 * .class文件中是没有泛型怎么保证数据安全的?
 * 有问题在编译时期已经体现了,就已经解决了,运行使用的时候就不会出现问题了,保证了程序的安全
 * */
public class Demo01Generic {
    public static void main(String[] args) {
        //method_01();
        method_02();
    }

    /*
     * ArrayList使用泛型
     * 保证程序安全:将运行时期的ClassCastException,转成编译时期变成问题
     * 避免强转失败
     * */
    private static void method_02() {
        ArrayList<String> list = new ArrayList<String>();
        list.add("abc");
        list.add("def");
        // list.add(1);//编译报错

        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            //it.next取出的元素是什么数据类型 集合存储元素的类型是String,取出的也是字符串
            String s = it.next();
            System.out.println(s);
        }

    }

    /*
     * ArrayList集合不使用泛型
     * 集合中数据类型默认Object类型,可以存储任意类型的数据
     *
     * */
    private static void method_01() {
        ArrayList list = new ArrayList();
        list.add("abc");
        list.add("adg");
        list.add(1);

        //使用迭代器
        Iterator it = list.iterator();
        while (it.hasNext()) {
            Object obj = it.next();
            System.out.println(obj);
            //想使用字符串特有功能:强转
            //转换的时候如果取出的不是字符串会报错ClassCastException类型转换异常
            String s = (String) obj;//Integer cannot be cast to java.lang.String
            System.out.println(s.length());
        }
    }
}
